package com.whfc.fim.dao;

import com.whfc.fim.dto.FimAlgCheckTypeCountDTO;
import com.whfc.fim.dto.FimResultDTO;
import com.whfc.fim.dto.FimResultRateContDTO;
import com.whfc.fim.entity.FimAlgResult;
import com.whfc.fim.param.FimSearchParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author : qzexing
 * @version : 1.0
 * @date : 2020-09-08 18:38
 */
public interface FimAlgResultMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(FimAlgResult record);

    int insertSelective(FimAlgResult record);

    FimAlgResult selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FimAlgResult record);

    int updateByPrimaryKey(FimAlgResult record);

    /**
     * 查找识别记录
     *
     * @param deptId
     * @param handleStatus
     * @param algCheckType
     * @param startTime
     * @param endTime
     * @return
     */
    List<FimResultDTO> selectFimResultList(@Param("deptId") Integer deptId,
                                           @Param("handleStatus") Integer handleStatus,
                                           @Param("algCheckType") Integer algCheckType,
                                           @Param("startTime") Date startTime,
                                           @Param("endTime") Date endTime);

    /**
     * 查找报警记录详情
     *
     * @param resultId resultId
     * @return FimResultDTO
     */
    FimResultDTO selectResultDTO(Integer resultId);

    /**
     * 统计时间段内报警总条数
     *
     * @param deptIds   deptId
     * @param startTime startTime
     * @param endTime   endTime
     * @return total
     */
    Integer countResultTotal(@Param("deptIds") List<Integer> deptIds,
                             @Param("startTime") Date startTime,
                             @Param("endTime") Date endTime);

    /**
     * 统计每种报警类型的报警总数
     *
     * @param deptId    deptId
     * @param startTime startTime
     * @param endTime   endTime
     * @return List<FimResultTagCountDTO>
     */
    List<FimAlgCheckTypeCountDTO> selectTagAmount(@Param("deptId") Integer deptId,
                                                  @Param("startTime") Date startTime,
                                                  @Param("endTime") Date endTime);


    /**
     * 统计报警记录频率
     *
     * @param deptId    deptId
     * @param startTime startTime
     * @param endTime   endTime
     * @param pattern   MYSQL时间格式化模板 %Y=年，%m=月，%d=日，%H=时，%Y=i，%s=秒
     * @return List<FimResultTagCountDTO>
     */
    List<FimResultRateContDTO> selectTagFrequency(@Param("deptId") Integer deptId,
                                                  @Param("startTime") Date startTime,
                                                  @Param("endTime") Date endTime,
                                                  @Param("pattern") String pattern);


    /**
     * 查找报警记录列表
     *
     * @param deptId       组织机构ID
     * @param algCheckType 报警类型
     * @param date         日期
     * @return 报警记录列表
     */
    List<FimResultDTO> selectResultList(@Param("deptId") Integer deptId,
                                        @Param("algCheckType") Integer algCheckType,
                                        @Param("date") Date date);

    /**
     * 统计报警数量
     *
     * @param deptId
     * @param handleStatus
     * @param startTime
     * @param endTime
     * @return
     */
    List<FimResultRateContDTO> selectWarnNum(@Param("deptId") Integer deptId,
                                             @Param("handleStatus") Integer handleStatus,
                                             @Param("startTime") Date startTime,
                                             @Param("endTime") Date endTime);

    /**
     * 批量逻辑删除
     *
     * @param resultIdList
     */
    void deleteLogic(@Param("resultIdList") List<Integer> resultIdList);

    /**
     * 批量处理智能监控报警记录
     *
     * @param resultIdList
     * @param handleResult
     * @param handleRemark
     * @param userId
     * @param userName
     */
    void batchUpdateState(@Param("resultIdList") List<Integer> resultIdList,
                          @Param("handleResult") String handleResult,
                          @Param("handleRemark") String handleRemark,
                          @Param("userId") Integer userId,
                          @Param("userName") String userName);

    /**
     * 随机获取一条报警数据
     *
     * @param checkTypes
     * @return
     */
    FimAlgResult getRandomWarnRule(@Param("checkTypes") List<Integer> checkTypes);

    List<FimResultRateContDTO> selectStatisticsDetail(@Param("param") FimSearchParam param);
}
